package com.icss.ah.email;

import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.OutputStream; 
import java.util.Properties; 
  
import javax.activation.DataHandler; 
import javax.activation.DataSource; 
import javax.activation.FileDataSource; 
import javax.mail.Authenticator; 
import javax.mail.MessagingException; 
import javax.mail.PasswordAuthentication; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.Message.RecipientType; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeBodyPart; 
import javax.mail.internet.MimeMessage; 
import javax.mail.internet.MimeMultipart; 
import javax.mail.internet.MimeUtility; 
  
/** 
 * 
 * @author Administrator csadchen 
 * MimeMultipart 一般电子邮件的容器是Multipart，定义了增加及删除电子邮件各部分内容的方法， 
 *        但是其是抽象类，需要其子类MimeMultipart来时用MimeMessage对象 
 * MimeBodyPart 是BodyPart具体用于mimeMessage的一个子类，MimeBodyPart对象代表一个 
 *       mimeMultipart对象的每一个部分 
 * MimeUtility.encodeText(String cn)用于解决邮件中的头部信息中中文的乱码问题 
 * 
 */
public class Demo3 { 
  
  public static void main(String[] args) throws Exception { 
      
    Properties properties = new Properties(); 
    properties.setProperty("mail.smtp.auth", "true");// 服务器需要认证 
    properties.setProperty("mail.transport.protocol", "smtp");// 声明发送邮件使用的端口 
    properties.setProperty("mail.host", "smtp.126.com");// 发送邮件的服务器地址 
      
    Session session = Session.getInstance(properties, new Authenticator() { 
      String sendUserName = "csadchen@163.com"; 
      String sendPassword = "cs577087"; 
      protected PasswordAuthentication getPasswordAuthentication() { 
        return new PasswordAuthentication(sendUserName, 
            sendPassword); 
      } 
    }); 
    session.setDebug(true); 
      
    MimeMessage msg = new MimeMessage(session);// 声明一个邮件体 
    msg.setFrom(new InternetAddress("\""+MimeUtility.encodeText("csadchen")+"\"<chensheng@chinasofti.com>")); 
    msg.setSubject("这是我的第一份复杂邮件");//设置邮件主题 
    msg.setRecipients(MimeMessage.RecipientType.TO, InternetAddress.parse(MimeUtility.encodeText("王翔攀")+"<chensheng@chinasofti.com>,"+MimeUtility.encodeText("三毛")+"<492134880@qq.com>")); 
  
    MimeMultipart msgMultipart = new MimeMultipart("mixed");// 标明邮件的组合关系，混合的关系 
    msg.setContent(msgMultipart);// 设置邮件体 
      
  
    MimeBodyPart attch1 = new MimeBodyPart();// 附件1 
    MimeBodyPart attch2 = new MimeBodyPart();// 附件2 
    MimeBodyPart content = new MimeBodyPart();// 邮件的正文，混合体（图片+文字） 
  
    // 将附件和正文设置到这个邮件体中 
    msgMultipart.addBodyPart(attch1); 
    msgMultipart.addBodyPart(attch2); 
    msgMultipart.addBodyPart(content); 
      
  
    // 设置第一个附件 
    DataSource ds1 = new FileDataSource("F:/ACCP5.0/文件/ssh配置.txt");// 指定附件的数据源 
    DataHandler dh1 = new DataHandler(ds1);// 附件的信息 
    attch1.setDataHandler(dh1);// 指定附件 
    attch1.setFileName("ssh.txt"); 
  
    // 设置第二个附件 
    DataSource ds2 = new FileDataSource("resource/48.jpg");// 指定附件的数据源 
    DataHandler dh2 = new DataHandler(ds2);// 附件的信息 
    attch2.setDataHandler(dh2);// 指定附件 
    attch2.setFileName("48.jpg"); 
  
    //设置邮件的正文 
    MimeMultipart bodyMultipart = new MimeMultipart("related");//依赖关系 
    content.setContent(bodyMultipart);//指定正文 
    MimeBodyPart htmlPart = new MimeBodyPart(); 
    MimeBodyPart gifPart = new MimeBodyPart(); 
    bodyMultipart.addBodyPart(htmlPart); 
    bodyMultipart.addBodyPart(gifPart); 
      
      
    DataSource gifds = new FileDataSource("resource/48.jpg");//正文的图片 
    DataHandler gifdh = new DataHandler(gifds); 
    gifPart.setHeader("Content-Location", "http://mimg.126.net/logo/126logo.gif"); 
    gifPart.setDataHandler(gifdh);//设置正文的图片 
      
    htmlPart.setContent("我只是来打酱油的，这是我的形象照！<img src=\"http://mimg.126.net/logo/126logo.gif\" >", "text/html;charset=gbk");//设置正文文字 
      
    msg.saveChanges();//保存邮件 
      
    //将邮件保存成文件 
    OutputStream ops = new FileOutputStream("E:/test/mail/test.eml"); 
    msg.writeTo(ops); 
    ops.close(); 
      
    Transport.send(msg); 
      
      
  
  } 
  
} 